package com.simpleframe.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ValidateCodeUtil extends HttpServlet {

	private static final long serialVersionUID = 7059105462303268303L;

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws   
    		ServletException, IOException {    
		  response.reset();    
		  response.setContentType("image/jpeg");    
		  response.setHeader("Pragma", "No-cache");    
		  response.setHeader("Cache-Control", "no-cache");    
		  response.setDateHeader("Expires", 0);    
		 
		//在内存中创建图象    
		  int width = 58, height = 20;    
		  BufferedImage image = new BufferedImage(width, height,    
		                                          BufferedImage.TYPE_INT_RGB);    
		 
		//获取图形上下文    
		  Graphics g = image.getGraphics();    
		 
		//生成随机类    
		  Random random = new Random();    
		 
		//设定背景色    
		  g.setColor(new Color(201 + random.nextInt(50), 201 + random.nextInt(50),    
		                       201 + random.nextInt(50)));    
		  g.fillRect(0, 0, width, height);    
		 
		//设定字体    
		  g.setFont(new Font("Times new Roman", Font.PLAIN, 18));    
		 
		//画边框    
		//g.setColor(new Color());    
		g.drawRect(0,0,width-1,height-1);    
		 
		//随机产生155条干扰线，使图象中的认证码不易被其它程序探测到    
		  g.setColor(new Color(160 + random.nextInt(41), 160 + random.nextInt(41),    
		                       160 + random.nextInt(41)));    
		  for (int i = 0; i < 155; i++) {    
		    int x = random.nextInt(width);    
		    int y = random.nextInt(height);    
		    int xl = random.nextInt(12);    
		    int yl = random.nextInt(12);    
		    g.drawLine(x, y, x + xl, y + yl);    
		  }    
		 
		//取随机产生的认证码(4位数字)    
		  String sRand = "";    
		  for (int i = 0; i < 4; i++) {    
		    String rand = String.valueOf(random.nextInt(10));    
		    sRand += rand;    
		 
		//将认证码显示到图象中    
		    g.setColor(new Color(20 + random.nextInt(111), 20 + random.nextInt(111),    
		                         20 + random.nextInt(111)));    
		 
		//调用函数出来的颜色相同，可能是因为种子太接近，所以只能直接生成    
		    g.drawString(rand, 13 * i + 6, 16);    
		  }    
		  HttpSession session = null;    
		 
		  session = request.getSession(true);    
		 
		  //将认证码存入SESSION    
		  session.setAttribute("validateCode", sRand);    
		 
		//图象生效    
		  g.dispose();    
		 
		//输出图象到页面    
		//ImageIO.write(image, "JPEG", resp.getOutputStream());    
		//response.setContentType("image/jpeg");    
		  ServletOutputStream out = response.getOutputStream();    
		  JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);    
		  encoder.encode(image);    
		  out.close();    
		}    


}